// run: $exec < input
// opt: 0
// flag: -g
#include <iostream>
#include <vector>

long long mo = 1000000007;
int const maxn = 100007;
long long pow2[maxn];
int a[maxn];
std::vector<std::vector<int> > all(maxn);
int n;

long long seq(int n)
{
	long long ret = pow2[n + 1] - 1;
	return (ret + mo) % mo;
}

long long calc(int n)
{
	long long ret = 0;
	for (int i = 1; i <= n - 1; i++) {
		long long tmp = seq(n - i - 1);
		tmp = (tmp * pow2[i - 1]);
		if (i == 1) tmp *= 2;
		ret += tmp;
		ret %= mo;
	}
	return ret;
}

int main()
{
	std::ios::sync_with_stdio(false);
	pow2[0] = 1;
	for (int i = 1; i < maxn; i++) pow2[i] = (pow2[i - 1] * 2) % mo;
	int T; std::cin >> T;
	while (T--) {
		std::cin >> n;
		for (int i = 1; i <= n; i++) all[i].clear();
		for (int i = 0; i < n; i++) {
			std::cin >> a[i];
			all[a[i]].push_back(i + 1);
		}
		long long tmp = calc(n);
		for (int i = 1; i <= n; i++) {
			long long sum = 0;
			for (int j = 0; j < (int)all[i].size(); j++) {
				tmp -= (sum * pow2[n - all[i][j]]) % mo;
				tmp = (tmp + mo) % mo;
				sum += pow2[all[i][j] - 1];
				if (all[i][j] == 1) sum++;
				sum %= mo;
			}
		}
		std::cout << ((tmp % mo) + mo) % mo << '\n';
	}
}

